﻿using System;
using System.Collections.Generic;
using System.Text;

namespace LeetcodeTest._100._20
{
    public class Leetcode13
    {
        public void Test()
        {
            try
            {
            }
            catch (Exception ex)
            { }
        }

        /*
         13. Roman to Integer

        Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.
         */

        /*
    罗马数字是阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字、即Ⅰ（1）、X（10）、C（100）、M（1000）、V（5）、L（50）、D（500）。记数的方法：

相同的数字连写，所表示的数等于这些数字相加得到的数，如 Ⅲ=3；
小的数字在大的数字的右边，所表示的数等于这些数字相加得到的数，如 Ⅷ=8、Ⅻ=12；
小的数字（限于 Ⅰ、X 和 C）在大的数字的左边，所表示的数等于大数减小数得到的数，如 Ⅳ=4、Ⅸ=9；
在一个数的上面画一条横线，表示这个数增值 1,000 倍，如

=5000。
    */

        public int RomanToInt(string s)
        {
            int iResult = 0;
            int temp1 = 0;
            int temp2 = 0;
            for (int i = 0; i < s.Length; i++)
            {
                temp1 = ConvertToInt(s[i]);
                if (i < s.Length - 1)
                {
                    temp2 = ConvertToInt(s[i+1]);
                    if (temp1 < temp2)
                    {
                        iResult += temp2 - temp1;
                        i++;
                    }
                    else
                    {
                        iResult += temp1;
                    }
                }
                else
                {
                    iResult += temp1;
                }
            }
            return iResult;
        }

        private int ConvertToInt(char c)
        {
            switch(c)
            {
                case 'I':
                    return 1;
                case 'X':
                    return 10;
                case 'C':
                    return 100;
                case 'M':
                    return 1000;
                case 'V':
                    return 5;
                case 'L':
                    return 50;
                case 'D':
                    return 500;
            }
            return 0;
        }
    }
}
